package com.qingsong.result;

import lombok.Data;
import java.io.Serializable;

/**
 * @author qingsong
 */
@Data
public class Result<T> implements Serializable {

    /** 响应代码 */
    private Integer code;
    /** 响应描述 */
    private String message;
    /** 响应数据 */
    private T data;

    /**
     * 创建Result类，默认返回成功状态码和响应描述，无响应数据
     */
    public Result() {
        this(ResultCode.SUCCESS.getCODE(), ResultCode.SUCCESS.getMESSAGE(), null);
    }

    /**
     * 创建Result类，默认返回成功状态码和响应描述，手动传递响应数据
     * @param data 响应数据
     */
    public Result(T data) {
        this(ResultCode.SUCCESS.getCODE(), ResultCode.SUCCESS.getMESSAGE(), data);
    }

    /**
     * 创建Result类, 手动传递响应状态枚举实例, 默认响应数据为null
     * @param resultCode 响应状态枚举实例
     */
    public Result(ResultCode resultCode) {
        this(resultCode.getCODE(), resultCode.getMESSAGE(), null);
    }

    /**
     * 创建Result类，手动传递响应状态枚举实例和响应数据
     * @param resultCode 响应状态枚举实例
     * @param data 响应数据
     */
    public Result(ResultCode resultCode, T data) {
        this(resultCode.getCODE(), resultCode.getMESSAGE(), data);
    }

    /**
     * 创建Result类, 手动传递响应代码, 响应描述和响应数据
     * @param code 响应代码
     * @param message 响应描述
     * @param data 响应数据
     */
    public Result(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
}